//  /=============================================================/
//  |   Auteurs  : J.JULLIEN / R.HERLEMAN / R.CHAILAN             |
//  |   Fichier  : litteral.c                                     |
//  |   Date     : 11/04/2009                                     |
//  |   Objet    : Définition du type "t_Litteral" &              |
//  |              ses fonctions associées                        |
//  /=============================================================/

#include "litteral.h"

/* ------------------------------------------------------------------------ */
/* -------------------- Définition fonctions exportées -------------------- */
/* ------------------------------------------------------------------------ */

t_Litteral* litteralInit (char s, int clause, int variable) {
  t_Litteral *el = (t_Litteral *) malloc(sizeof(t_Litteral));
  
  el->litteral = (s == '+')?1:-1;
  el->clause = clause;
  el->variable = variable;
  el->variableSuiv = NULL;
  el->clauseSuiv = NULL;
  
  return el;
}

int litteralGetValeur(t_Litteral lit, int val) {
  if (val == 0 || val == 1) {
    if (lit.litteral>0) {
      return val;
    } else {
      return ! val;
    }
  } else {
    return val;
  }
}

void litteralAfficherSigne (t_Litteral lit) {
  printf("%c ", (lit.litteral>0)?'+':'-');
}

void litteralAfficherPredicat (t_Litteral lit) {
  if (lit.litteral<0) { 
    printf("¬");
  }
  printf("x%d", lit.variable+1);
}

void litteralAfficherDebug (t_Litteral lit, int avecValeur, int val) {
  printf("(%c", (lit.litteral<0)?'-':'+');
  if (avecValeur == 1) {
    printf(", val %d", litteralGetValeur(lit, val));
  }
  printf(", clause %d, var %d) ", lit.clause, lit.variable);
}
